//? 实现一个 flatten 函数，实现如下的转换功能
const obj = {
    a: 1,
    b: [1, 2, { c: true },[3]],
    c: { e: 2, f: 3 },
    g: null,
};
//? 转换为 因为嵌套里的key可能重复，可能导致flat出来的对象缺少一些key
let objRes = {
    a: 1,
    "b[0]": 1,
    "b[1]": 2,
    "b[2].c": true,
    'b[3][0]': 3,
    "c.e": 2,
    "c.f": 3,
    g: null,
};


function objFlat(obj) {
    let res = {}
    function flat(key,value) {
        if (typeof value !== 'object') {
            res[key] = value
        }
        else if (Array.isArray(value)) {
            value.forEach((item,index) => {
                flat(`${key}[${index}]`,item)
            })
            // if (value.length === 0) {
            //     res[key] = []
            // }
        }
        else {
            if (value === null) {
                res[key] = value
                return
            }
            let keys = Object.keys(value)
            keys.forEach(item => {
                flat(key ? `${key}.${item}` : `${item}`, value[item])
            })
            // if (keys.length === 0 && key) {
            //     res[key] = {}
            // }
        }
    }
    flat('',obj)
    return res
}
console.log(objFlat(obj));
